import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store' // 9.9

Vue.use(VueRouter)

const routes = [
  /* // 7.5 重定向默认打开的网页：
  { path: '/', redirect: '/login' }, */
  // 4.3 配置 [注册和登录]界面规则：
  {
    path: '/register',
    component: () => import('@/views/register')
  },
  {
    path: '/login',
    component: () => import('@/views/login')
  },
  /* // 8.end同步：配置主页面路由规则
  {
    path: '/home',
    component: () => import('@/views/layout')
  }, */
  // 9. 合并后的代码----------------------------------
  {
    // 9.1 处理合并后的路由：
    path: '/',
    component: () => import('@/views/layout'),
    redirect: '/home', // 默认显示首页的二级路由
    children: [
      {
        path: 'home',
        component: () => import('@/views/home')
      },
      // 13.2 文字分类路由配置：
      {
        path: 'art-cate',
        component: () => import('@/views/article/artCate.vue')
      },
      {
        path: 'art-list',
        component: () => import('@/views/article/artList.vue')
      },
      // 30.2 个人中心路由配置：
      { // 基本资料
        path: '/user-info',
        component: () => import('@/views/user/userInfo.vue')
      },
      { // 更换头像
        path: '/user-avatar',
        component: () => import('@/views/user/userAvatar.vue')
      },
      { // 重置密码
        path: '/user-pwd',
        component: () => import('@/views/user/userPwd.vue')
      }
    ]
  }
  // 9. 合并后的代码----------------------------------
]

const router = new VueRouter({
  routes
})

// 11.2 设置白名单：
const whiteList = ['/login', '/reg']

// 9.9 再改良：全局前置路由守卫.
router.beforeEach((to, from, next) => {
  /* 9.9
  const token = store.state.token
  // ① 如果本地下有 token值, 才去请求用户信息
  // 多加判断 用户名存在与否,这样当切换路由后,不会重复请求.
  if (token && !store.state.userInfo.username) {
    store.dispatch('getUserInfoActions')
  }

  // ② 请求用户信息完成后，跳转到 主页面进行渲染.
  next() */

  // 11.1 进行权限拦截(未登录的)
  const token = store.state.token
  if (token) {
    // ① 已登录的：
    if (!store.state.userInfo.username) {
      // 如果本地下有 token值, 才去请求用户信息：
      store.dispatch('getUserInfoActions')
    }

    next()
  } else {
    // ② 未登录的：
    if (whiteList.includes(to.path)) {
      // 未登录时，分为两种情况：
      // 这个区域是原先登录过的,本地有记录(且没退出以及令牌还在),则后续打开网页直接跳转到主页.
      next()
    } else {
      // 该区域下是指：退出登录+令牌过期 → 当用户直接访问主页面,会直接拦截回[登录+注册页]
      next('/login')
    }
  }
})

export default router
